Two sum less than K¶
Time: O(NLogN); Space: O(1); easy
Given an array A of integers and integer K, return the maximum S such that there exists i smaller than j with A[i] + A[j] = S and S smaller than K. If no i, j exist satisfying this equation, return -1.
Example 1:
Input: A = [34,23,1,24,75,33,54,8], K = 60
Output: 58
Explanation:
We can use 34 and 24 to sum 58 which is less than 60.
Example 2:
Input: A = [10,20,30], K = 15
Output: -1
Explanation:
In this case it’s not possible to get a pair sum less that 15.
[1]:
class Solution1(object):
def twoSumLessThanK(self, A, K):
"""
:type A: List[int]
:type K: int
:rtype: int
"""
A.sort()
result = -1
left, right = 0, len(A)-1
while left < right:
if A[left]+A[right] >= K:
right -= 1
else:
result = max(result, A[left]+A[right])
left += 1
return result
[2]:
s = Solution1()
A = [34,23,1,24,75,33,54,8]
K = 60
assert s.twoSumLessThanK(A, K) == 58
A = [10,20,30]
K = 15
assert s.twoSumLessThanK(A, K) == -1